//
//  MainViewController.swift
//  上海微博
//
//  Created by 🍃叶子 on 16/4/15.
//  Copyright © 2016年 🍃叶子. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 在 viewDidLoad 只是添加子控制器, 不会创建 tabBar 的 UITabBarButton
        // tabBar 的按钮会在viewWillAppear(将要显示) 方法之前被创建
        addChildViewControllers()
        //也可以不基于tintColor 分开设置
        //tabBar.tintColor = UIColor.orangeColor()
        
        setupTabbar()
        // 问题: Navigation 怎么设置
        
//        print(tabBar.subviews)
    }
    
    
    override func viewWillAppear(animated: Bool) {  //makeKeyAndVisible
        super.viewWillAppear(animated)
        
//        print(tabBar.subviews)
        
        tabBar.bringSubviewToFront(composeButton)
        
        // 计算按钮宽度  // CGFloat  /  Int
        // -1 是防止边界处理(放大按钮)  --> BUG 中间的按钮没有被遮全(苹果的容错处理边界点) 
        let width = tabBar.bounds.width / CGFloat(childViewControllers.count) - 1
        
        // Returns a rectangle that is smaller or larger than the source rectangle, with the same center point.
        // CGRectInset : 返回一个比原矩形小或者大的矩形
        // width/hight > 0 向内缩小
        // width,hight < 0 向外扩大
        composeButton.frame = CGRectInset(tabBar.bounds, width * 2, 0)
    }
    
    
    // MARK: - 监听方法
    // 一旦使用了 private 函数变成私有,运行循环无法找到此函数,如果发送消息,会抛出异常!
    // @objc 关键字能够在编译的时候,让函数能够使用 OC 的消息机制被调用到
  @objc private func clickComposeBotton() {
        print("监听按钮")
    }
    
    
    // MARK: - 私有控件 
    ///  撰写按钮     // 公有的都放上面
    private lazy var composeButton :UIButton = {
        
        let button = UIButton()
        
        let imageName = ""
        let backgroudImage = ""
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        
        // 让按钮根据背景图片调整大小
        button.sizeToFit()
        
        button.addTarget(self, action: "clickComposeBotton", forControlEvents: .TouchUpInside)
        
        return button
    }()
    
}

// MARK: - 设置 tabbar
extension MainViewController{
    
    // 设置 tabbar
    private func setupTabbar(){
        // 设置tabbar背景图片,一下两句代码必须连用,Nav 的处理类似
        // 一下两个属性都设置成 [[UIImage alloc] init] 就设置完全透明 //tabBar.shadowImage = UIImage()
        // 如果提供图像,会自动拉伸   // white: 0.9, alpha: 1.0 -->RGB三个值相等以灰色过度
        tabBar.shadowImage = UIImage.cz_singleDotImage(UIColor(white: 0.9, alpha: 1.0))
        tabBar.backgroundImage = UIImage(named: "tabbar_background")
        
        tabBar.addSubview(composeButton)
    }
    
}

// MARK: - 添加控制器
// 通过 extension 把相关的代码进行分组设置
extension MainViewController{
    
    // 添加所有控制器
    // 改写下面的方法
    private func addChildViewControllers() {
        
        addChildViewController(HomeViewController(), title: "首页", imageName: "tabbar_home")
        addChildViewController(MessageViewController(), title: "消息", imageName: "tabbar_message_center")
       
        // 添加一个空白控制器
        addChildViewController(UIViewController())
        
        addChildViewController(DiscoverViewController(), title: "发现", imageName: "tabbar_discover")
        addChildViewController(ProfileViewController(), title: "我", imageName: "tabbar_profile")

        
    }
    

    // 默认addChildViewController(childController: UIViewController)
    // 自定义一个类方法
    private func addChildViewController(vc: UIViewController,title:String,imageName:String) {
        
        //let vc = HomeViewController()
        
        // 控制器从内向外设置的 Navigation因为添加在TabBar上面所以TabBar也会有
        vc.title = title
        
        // 自定义文本属性
        // 文本属性的 key 都包含 AttributeName
        vc.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.orangeColor()], forState: .Selected)
        //vc.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFontOfSize(20)], forState: .Normal)
        
         vc.tabBarItem.image = UIImage(named: imageName)
        // 默认情况下,tabbar的image会使用系统默认颜色的"渲染"
        // .AlwaysOriginal 渲染模式,就会直接使用平面设计师提供的素材颜色,系统不再加工
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_selected")?.imageWithRenderingMode(.AlwaysOriginal)
        
        let nav = UINavigationController(rootViewController: vc)
        
        //nav.title = "首页"
        
        // 添加子控制器
        addChildViewController(nav)
        
    }
    
}